#pragma once


#include<iostream>

using namespace std;

namespace yyh
{
	template<class T>
	struct ListNode
	{
		ListNode(const T& val = T())
			:_prev(nullptr)
			,_pnext(nullptr)
			,_val(val)
		{ }

		ListNode<T>* _prev;
		ListNode<T>* _pnext;
		T _val;
	};

	template<class T, class Ref, class Ptr>
	struct list_iterator
	{

	};

	template<class T>
	class list
	{
	public:
		
		typedef ListNode<T> Node;

		void EmptyInit()
		{
			_head = new Node;
			_head->_prev = _head->_pnext = _head;
			_size = 0;
		}

		list()
		{
			EmptyInit();
		}

		list(size_t n, const T& value = T())
		{

		}

		void push_back(const T& value)
		{
			
		}

		void insert()
		{

		}

	private:
		Node* _head;
		size_t _size;
	};

	void test()
	{
		list<int> l1;

	}
}